<!DOCTYPE html>
<html>
	<head>
		<meta charset="UTF-8" />
		<title>姓名案例_computed</title>
		<script type="text/javascript" src="../js/vue.js"></script>
	</head>
	<body>
		<!-- 
				1.计算属性：要显示的数据不存在，要通过已有的属性计算得来。
				2.计算属性fullName，其实底层用到的是对象的setter和getter。
				3.计算属性中get执行的时机：
							(1).初始显示会执行一次，得到初始值去显示。
							(2).当依赖的数据发生改变时会被再次调用。
				4.优势：与methods实现相比，内部有缓存机制（复用），效率更高。
				5.备注：
						1.计算属性是用于直接读取使用的，不要加()去调用
						2.如果计算属性fullName以后要被修改，那么必须写set去响应修改，且set中要引起计算时依赖的数据发生变化。
		-->

		<!-- 准备好一个容器-->
		<div id="root">
			姓：<input type="text" v-model="firstName"> <br/>
			名：<input type="text" v-model="lastName"> <br/>
			全名：<span>{{fullName}}</span>
			<!-- 全名：<span>{{fullName}}</span>
			全名：<span>{{fullName}}</span>
			全名：<span>{{fullName}}</span>
			全名：<span>{{fullName}}</span> -->
		</div>

		<script type="text/javascript" >
			const vm =	new Vue({
					el:'#root',
					data:{
						firstName:'张',
						lastName:'三',
					},
					computed:{ //要显示的属性不存在，要靠已有的属性计算得来
						fullName:{
							//set什么时候调用？当有人修改fullName时，set被调用。
							set(value){
								console.log('set')
								const arr = value.split('-')
								this.firstName = arr[0]
								this.lastName = arr[1]
							},

							//get什么时候调用？1.初始化显示时，get会被调用。2.当依赖的数据发生变化时，会被调用。
							get(){ 
								// console.log(this) //this是vm
								console.log('@-get')
								return this.firstName + '-' + this.lastName
							}
						}
					}
				})

				console.log(vm)
		</script>
	</body>
</html>